﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIIE_ERP.Codigo;

namespace SIIE_ERP.BaseDatos.PuntoVenta.Transacciones
{
    public class dbo_Tickets
    {

        #region Propiedades

        private string _RFC;
        private string _Usuario;
        
        #endregion

        #region Constructores

        public dbo_Tickets(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion

        #region INSERT

        public int NextTicket()
        { 
            return Int32.Parse(SrvDB.ExecuteQuery_Get("SELECT IIF(DCount('*', 'dbo_Trans_Ticket_Cab') = 0, 1, DMax('Id_Ticket', 'dbo_Trans_Ticket_Cab') + 1)").Rows[0][0].ToString());
        }

        public Respuesta Insert_Ticket_Cab(
        
            int NoTicket,
            string Secuencia,
            EstatusDocs_Id Estatus,          
            int Id_Cuenta,
            int Id_Almacen,            
            string Terminacion_Tarjeta,
            int Id_Terminal,
            int Id_Moneda,            
            int Id_Apertura,
            bool EsEfectivo,
            string Comentarios   
        ) {

            string Query = @"

                INSERT INTO dbo_Trans_Ticket_Cab
                (
                    Id_Ticket,
                    RFC,
                    Secuencia,
                    Estatus,
                    Fecha_Ticket,
                    Id_Cuenta,
                    Id_Almacen,
                    Partidas,
                    Subtotal,
                    Descuento,
                    Impuesto,
                    Total,
                    Terminacion_Tarjeta,
                    Id_Terminal,
                    Id_Moneda,
                    Is_Facturado,
                    Id_Apertura,
                    EsEfectivo,
                    Comentarios,
                    Fecha_Alta,
                    Usuario_Alta,
                    Fecha_Mantto,
                    Usuario_Mantto
                )
                VALUES
                (
                    @@NoTicket,                                
                    '@@RFC',
                    @@Secuencia,
                    @@Estatus,
                    NOW(),
                    @@Id_Cuenta,
                    @@Id_Almacen,
                    0,
                    0,
                    0,
                    0,
                    0,
                    '@@Terminacion_Tarjeta',
                    @@Id_Terminal,
                    @@Id_Moneda,
                    0,
                    @@Id_Apertura,
                    @@EsEfectivo,
                    '@@Comentarios',
                    NOW(),
                    '@@Usuario_Alta',
                    NOW(),
                    '@@Usuario_Mantto'
                )
            "
                .Replace("@@NoTicket", NoTicket.ToString())
                .Replace("@@RFC", this._RFC )
                .Replace("@@Secuencia", Secuencia)
                .Replace("@@Estatus", Estatus.GetHashCode().ToString())
                .Replace("@@Id_Cuenta", Id_Cuenta.ToString())
                .Replace("@@Id_Terminal", Id_Terminal.ToString())
                .Replace("@@Id_Almacen", Id_Almacen.ToString())
                .Replace("@@Terminacion_Tarjeta", Terminacion_Tarjeta)
                .Replace("@@Id_Moneda",Id_Moneda.ToString())
                .Replace("@@Id_Apertura", Id_Apertura.ToString())
                .Replace("@@Comentarios", Comentarios.Replace("'", "''"))
                .Replace("@@Usuario_Alta", this._Usuario)
                .Replace("@@Usuario_Mantto", this._Usuario);

            if (EsEfectivo)
                Query = Query.Replace("@@EsEfectivo", "1");
            else
                Query = Query.Replace("@@EsEfectivo", "0");

            return SrvDB.ExecuteQuery_Insert(Query);
        }

        public Respuesta Insert_Ticket_Linea(

            int Id_Ticket,
            int Id_Articulo,
            double Cantidad,
            double Precio_Unitario,
            double Porc_Descuento,
            double Descuento,
            double SubTotal,
            double Porc_Impuesto,
            double Impuesto,
            double Precio_Total            
        )
        {

            string Query = @"

                INSERT INTO dbo_Trans_Ticket_Linea
                (
                    Id_Linea_Ticket,
                    RFC,
                    Id_Ticket,
                    Secuencia,
                    Id_Articulo,
                    Cantidad,
                    Precio_Unitario,
                    Porc_Descuento,
                    Descuento,
                    SubTotal,
                    Porc_Impuesto,
                    Impuesto,
                    Precio_Total,
                    Fecha_Alta,
                    Usuario_Alta,
                    Fecha_Mantto,
                    Usuario_Mantto
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Trans_Ticket_Linea') = 0, 1, DMax('Id_Linea_Ticket', 'dbo_Trans_Ticket_Linea') + 1),                                
                    '@@RFC',
                    @@Id_Ticket,
                    IIF(DCount('*', 'dbo_Trans_Ticket_Linea', ""Id_Ticket = @@Id_Ticket"") = 0, 1, DMax('Secuencia', 'dbo_Trans_Ticket_Linea', ""Id_Ticket = @@Id_Ticket"") + 1),
                    @@Id_Articulo,
                    @@Cantidad,
                    @@Precio_Unitario,
                    @@Porc_Descuento,
                    @@Descuento,
                    @@SubTotal,
                    @@Porc_Impuesto,
                    @@Impuesto,
                    @@Precio_Total,
                    NOW(),
                    '@@Usuario_Alta',
                    NOW(),
                    '@@Usuario_Mantto'
                )
                "
                .Replace("@@RFC", this._RFC)
                .Replace("@@Id_Ticket", Id_Ticket.ToString())            
                .Replace("@@Id_Articulo", Id_Articulo.ToString())
                .Replace("@@Cantidad", Cantidad.ToString())
                .Replace("@@Precio_Unitario", Precio_Unitario.ToString())
                .Replace("@@Porc_Descuento", Porc_Descuento.ToString())
                .Replace("@@Descuento", Descuento.ToString())
                .Replace("@@SubTotal", SubTotal.ToString())
                .Replace("@@Porc_Impuesto", Porc_Impuesto.ToString())
                .Replace("@@Impuesto", Impuesto.ToString())
                .Replace("@@Precio_Total", Precio_Total.ToString())                
                .Replace("@@Usuario_Alta", this._Usuario)
                .Replace("@@Usuario_Mantto", this._Usuario);

            Respuesta r1 = SrvDB.ExecuteQuery_Insert(Query);

            string Query2 = @"

                UPDATE dbo_Trans_Ticket_Cab 
                     SET
                        Total = DMax('Total', 'dbo_Trans_Ticket_Cab', ""Id_Ticket = @@Id"") + @@Total,
                        Impuesto = DMax('Impuesto', 'dbo_Trans_Ticket_Cab', ""Id_Ticket = @@Id"") + @@Impuesto,
                        Descuento = DMax('Descuento', 'dbo_Trans_Ticket_Cab', ""Id_Ticket = @@Id"") + @@Descuento,
                        Subtotal = DMax('Subtotal', 'dbo_Trans_Ticket_Cab', ""Id_Ticket = @@Id"") + @@Subtotal,
                        Partidas = DMax('Partidas', 'dbo_Trans_Ticket_Cab', ""Id_Ticket = @@Id"") + 1
                     WHERE Id_Ticket = @@Id
                ";

            Query2 = Query2.Replace("@@Id", Id_Ticket.ToString());                  
            Query2 = Query2.Replace("@@Descuento", Descuento.ToString());                
            Query2 = Query2.Replace("@@Subtotal", SubTotal.ToString());                
            Query2 = Query2.Replace("@@Impuesto", Impuesto.ToString());
            Query2 = Query2.Replace("@@Total", Precio_Total.ToString());

            Respuesta r2 = SrvDB.ExecuteQuery_Update(Query2);

            if (r1.Id == 1 && r2.Id == 1)
                return new Respuesta(1, "Exito!");
            else
                return new Respuesta(2, "ERROR!");

        }

        #endregion

        #region SELECT

        public DataTable Get_Report_Impresiones(int Tiempo)
        {
            string Query = @"

                SELECT        

	                R.Id_Usuario AS IdUser, 
	                T.Secuencia, 
	                U.UserName, 
	                U.Nombre, 
	                T.RFC, 
	                R.Fecha, 
	                T.Fecha_Alta

                FROM            
                ((	dbo_Trans_Ticket_Cab AS T 
                INNER JOIN dbo_Trans_Ticket_Reimpresion AS R ON R.Id_Ticket = T.Id_Ticket )
	            LEFT OUTER JOIN dbo_Sec_Usuario AS U ON U.Id_Usuario = R.Id_Usuario )

                WHERE 

                    T.RFC = '@@RFC'                
                AND 
				(
				(@@Tiempo = 1 and Year(T.Fecha_Alta) = Year(NOW()) and Month(T.Fecha_Alta) = Month(NOW())) or
				(@@Tiempo = 2 and Year(T.Fecha_Alta) = Year(DateAdd('m',-1,NOW())) and Month(T.Fecha_Alta) = Month(DateAdd('m',-1,NOW()))) or
				(@@Tiempo = 3 and Year(T.Fecha_Alta) = Year(NOW())) or
				(@@Tiempo = 4 and Year(T.Fecha_Alta) = Year(DateAdd('yyyy',-1,NOW()))) or
				(@@Tiempo = 5)
				)  
            ";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tiempo", Tiempo.ToString());            

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_TA(int Tiempo, int Id_Terminal)
        {
            string Query = @"

                     SELECT        
	                a.Id_Ticket, 
	                a.Secuencia, 
	                a.RFC, 
	                YEAR(a.Fecha_Ticket) AS Anio, 
	                MONTH(a.Fecha_Ticket) AS Mes_Id, 
	                Cstr(YEAR(a.Fecha_Ticket))  + '-' + 
      
                    Switch(
		                MONTH(a.Fecha_Ticket) < 10, '0' + Cstr(MONTH(a.Fecha_Ticket)),
		                true, Cstr(MONTH(a.Fecha_Ticket))
                    ) AS Mes, 

	                a.Fecha_Ticket, 
	                a.Id_Terminal, 
	                dbo_Cat_Terminal.Descripcion AS Terminal, 
	                m.Id_Almacen, 
	                m.Descripcion AS Almacen, 
	                a.Id_Cuenta, 
	                dbo_Cat_Cuenta_Bancaria.Nombre AS Cuenta_Bancaria, 
	                e.Id_Articulo, 
	                e.Nombre AS Articulo, 
	                e.NombreTicket, 
	
	                Switch(
		                e.Marca IS NULL, 'Sin Marca',
		                true, e.Marca
                    ) AS Marca, 

	                f.Id_GrupoProductos,
	                f.Nombre AS Grupo_Productos, 
	                i.Id_SubgrupoProductos, 
	                i.Nombre AS Subgrupo_Productos, 
	                j.Id_Linea, 
	                j.Nombre AS Linea, 
	                g.Id_Color, 
	                g.Nombre AS Color,
	                h.Id_Talla, 
	                h.Nombre AS Talla, 
	                b.SubTotal * k.TipoCambio AS Importe_Pesos, 
	                b.SubTotal AS Importe_Moneda_Fact, 
	                b.Cantidad, 
	                n.Nombre AS UnidadMedida, 
	                b.Cantidad * e.Costo_Std AS Costo_Std, 
    
	                Switch(
		                e.Costo_Pref = '1', 	b.Cantidad * 	 Costo_Std,
		                e.Costo_Pref = '2', 	b.Cantidad * 	 Costo_Promedio,
		                e.Costo_Pref = '3', 	b.Cantidad * 	 Costo_Ultimo
                    )  AS Costo_Pref, 
						 
	                b.Cantidad * e.Costo_Promedio AS Costo_Promedio, 
	                b.Cantidad * e.Costo_Ultimo AS Costo_Ultimo, 
	
	                Switch(
		                e.Costo_Pref = '1', 	b.SubTotal - b.Cantidad *  Costo_Std,
		                e.Costo_Pref = '2', 	b.SubTotal - b.Cantidad *  Costo_Promedio,
		                e.Costo_Pref = '3', 	b.SubTotal - b.Cantidad *  Costo_Ultimo
                    ) AS Utilidad, 

	                b.Precio_Unitario, 
	                b.Porc_Descuento, 
	                b.Descuento, 
	                b.Impuesto, 
	                a.Id_Moneda, 
	                o.Clave AS Clave_Moneda, 
	                o.Simbolo AS Simbolo_Moneda, 
	                o.Nombre AS Moneda, 
	                a.Estatus, 
	                a.Fecha_Alta, 
	                a.Usuario_Alta, 
                    ' ' AS Usuario
 	            FROM
                (((((((((((((dbo_Trans_Ticket_Cab AS a 
	                INNER JOIN dbo_Trans_Ticket_Linea AS b ON a.Id_Ticket = b.Id_Ticket )
                    INNER JOIN dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo )
	                LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos )
	                LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color )
	                LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea )
	                LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla )
	                LEFT OUTER JOIN dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos )
	                LEFT OUTER JOIN dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda )
	                LEFT OUTER JOIN dbo_Cat_Almacen AS m ON a.Id_Almacen = m.Id_Almacen )
	                LEFT OUTER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM )
	                INNER JOIN dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda )
	                INNER JOIN dbo_Cat_Cuenta_Bancaria ON a.Id_Cuenta = dbo_Cat_Cuenta_Bancaria.Id_Cuenta )
	                INNER JOIN dbo_Cat_Terminal ON a.Id_Terminal = dbo_Cat_Terminal.Id_Terminal )

                WHERE e.Id_UM = -1

                AND a.RFC = '@@RFC' 

                AND (@@Id_Terminal = -1 or @@Id_Terminal = a.Id_Terminal)
                AND 
				(
				(@@Tiempo = 1 and Year(a.Fecha_Alta) = Year(NOW()) and Month(a.Fecha_Alta) = Month(NOW())) or
				(@@Tiempo = 2 and Year(a.Fecha_Alta) = Year(DateAdd('m',-1,NOW())) and Month(a.Fecha_Alta) = Month(DateAdd('m',-1,NOW()))) or
				(@@Tiempo = 3 and Year(a.Fecha_Alta) = Year(NOW())) or
				(@@Tiempo = 4 and Year(a.Fecha_Alta) = Year(DateAdd('yyyy',-1,NOW()))) or
				(@@Tiempo = 5)
				)  

            ";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tiempo", Tiempo.ToString());
            Query = Query.Replace("@@Id_Terminal", Id_Terminal.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report(int Tiempo, int Id_Terminal)
        {
            string Query = @"

                SELECT        
	
	                a.Id_Ticket, 
	                a.Secuencia, 
	                a.RFC, 
	                YEAR(a.Fecha_Ticket) AS Anio, 
	                MONTH(a.Fecha_Ticket) AS Mes_Id, 
	                Cstr(YEAR(a.Fecha_Ticket))  + '-' + 
      
                    Switch(
		                MONTH(a.Fecha_Ticket) < 10, '0' + Cstr(MONTH(a.Fecha_Ticket)),
		                true, Cstr(MONTH(a.Fecha_Ticket))
                    ) AS Mes, 

	                a.Fecha_Ticket, 
	                a.Id_Terminal, 
	                dbo_Cat_Terminal.Descripcion AS Terminal, 
	                m.Id_Almacen, 
	                m.Descripcion AS Almacen, 
	                a.Id_Cuenta, 
	                dbo_Cat_Cuenta_Bancaria.Nombre AS Cuenta_Bancaria, 
	                e.Id_Articulo, 
	                e.Nombre AS Articulo, 
	                e.NombreTicket, 
	
	                Switch(
		                e.Marca IS NULL, 'Sin Marca',
		                true, e.Marca
                    ) AS Marca, 

	                f.Id_GrupoProductos,
	                f.Nombre AS Grupo_Productos, 
	                i.Id_SubgrupoProductos, 
	                i.Nombre AS Subgrupo_Productos, 
	                j.Id_Linea, 
	                j.Nombre AS Linea, 
	                g.Id_Color, 
	                g.Nombre AS Color,
	                h.Id_Talla, 
	                h.Nombre AS Talla, 
	                b.SubTotal * k.TipoCambio AS Importe_Pesos, 
	                b.SubTotal AS Importe_Moneda_Fact, 
	                b.Cantidad, 
	                n.Nombre AS UnidadMedida, 
	                b.Cantidad * e.Costo_Std AS Costo_Std, 
    
	                Switch(
		                e.Costo_Pref = '1', 	b.Cantidad * 	 Costo_Std,
		                e.Costo_Pref = '2', 	b.Cantidad * 	 Costo_Promedio,
		                e.Costo_Pref = '3', 	b.Cantidad * 	 Costo_Ultimo
                    )  AS Costo_Pref, 
						 
	                b.Cantidad * e.Costo_Promedio AS Costo_Promedio, 
	                b.Cantidad * e.Costo_Ultimo AS Costo_Ultimo, 
	
	                Switch(
		                e.Costo_Pref = '1', 	b.SubTotal - b.Cantidad *  Costo_Std,
		                e.Costo_Pref = '2', 	b.SubTotal - b.Cantidad *  Costo_Promedio,
		                e.Costo_Pref = '3', 	b.SubTotal - b.Cantidad *  Costo_Ultimo
                    ) AS Utilidad, 

	                b.Precio_Unitario, 
	                b.Porc_Descuento, 
	                b.Descuento, 
	                b.Impuesto, 
	                a.Id_Moneda, 
	                o.Clave AS Clave_Moneda, 
	                o.Simbolo AS Simbolo_Moneda, 
	                o.Nombre AS Moneda, 
	                a.Estatus, 
	                a.Fecha_Alta, 
	                a.Usuario_Alta, 
                ' ' AS Usuario
 
                FROM            
	
                (((((((((((((dbo_Trans_Ticket_Cab AS a 
	                INNER JOIN dbo_Trans_Ticket_Linea AS b ON a.Id_Ticket = b.Id_Ticket )
                INNER JOIN dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo )
	                LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos )
	                LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color )
	                LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea )
	                LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla )
	                LEFT OUTER JOIN dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos )
	                LEFT OUTER JOIN dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda )
	                INNER JOIN dbo_Cat_Almacen AS m ON a.Id_Almacen = m.Id_Almacen )
	                INNER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM )
	                INNER JOIN dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda )
	                INNER JOIN dbo_Cat_Cuenta_Bancaria ON a.Id_Cuenta = dbo_Cat_Cuenta_Bancaria.Id_Cuenta )
	                INNER JOIN dbo_Cat_Terminal ON a.Id_Terminal = dbo_Cat_Terminal.Id_Terminal )

                WHERE a.RFC = '@@RFC' 

                AND (@@Id_Terminal = -1 or @@Id_Terminal = a.Id_Terminal)
                AND 
				(
				(@@Tiempo = 1 and Year(a.Fecha_Alta) = Year(NOW()) and Month(a.Fecha_Alta) = Month(NOW())) or
				(@@Tiempo = 2 and Year(a.Fecha_Alta) = Year(DateAdd('m',-1,NOW())) and Month(a.Fecha_Alta) = Month(DateAdd('m',-1,NOW()))) or
				(@@Tiempo = 3 and Year(a.Fecha_Alta) = Year(NOW())) or
				(@@Tiempo = 4 and Year(a.Fecha_Alta) = Year(DateAdd('yyyy',-1,NOW()))) or
				(@@Tiempo = 5)
				)  

            ";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tiempo", Tiempo.ToString());
            Query = Query.Replace("@@Id_Terminal", Id_Terminal.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Tickets()
        {
            string Query = @"SELECT                 
                                A1.*								
                            FROM dbo_Trans_Ticket_Cab AS A1
                            WHERE A1.RFC = '@@RFC' ORDER BY Fecha_Ticket DESC";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Tickets_NoFacturados()
        {
            string Query = @"SELECT                 
                                A1.*								
                            FROM dbo_Trans_Ticket_Cab AS A1
                            WHERE A1.RFC = '@@RFC' AND Is_Facturado = 0 ORDER BY Fecha_Ticket DESC";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Ticket_Por_Secuencia(string Secuencia)
        {
            //CAmbio de secuencia por Id_Ticket
            string Query = @"SELECT                 
                                A1.*								
                            FROM dbo_Trans_Ticket_Cab AS A1
                            WHERE A1.RFC = '@@RFC' AND Secuencia = '@@Secuencia'";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Secuencia", Secuencia);

            return SrvDB.ExecuteQuery_Get(Query);

        }
        public DataTable Get_Ticket_Por_Id(string IdTicket)
        {
            //CAmbio de secuencia por Id_Ticket
            string Query = @"SELECT                 
                                A1.*								
                            FROM dbo_Trans_Ticket_Cab AS A1
                            WHERE A1.RFC = '@@RFC' AND Id_Ticket = @@IdTicket";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@IdTicket", IdTicket);

            return SrvDB.ExecuteQuery_Get(Query);

        }

        public DataTable Get_Partidas_Ticket_Por_Id(string IdTicket)
        {
            string Query = @"SELECT A1.*, A2.NombreTicket as NombreCorto FROM 
                                dbo_Trans_Ticket_Linea as A1 INNER JOIN
                                    dbo_Cat_Articulo as A2 ON A1.Id_Articulo = A2.Id_Articulo
                            WHERE 
                                A1.Id_Ticket = @@IdTicket";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@IdTicket", IdTicket);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public Double? Total_Cobrado_En_Efectivo()
        {
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(this._RFC, this._Usuario);
            var terminal = db.Get_Terminal_Abierta() as DataRow;

            if (terminal != null)
            {
                string Query = @"SELECT SUM(Total) as Total FROM dbo_Trans_Ticket_Cab WHERE
                                 Id_Apertura = @@IdApertura AND EsEfectivo <> 0";
                Query = Query.Replace("@@IdApertura", terminal["Id_Apertura"].ToString());
                var ans = SrvDB.ExecuteQuery_Get(Query);
                if (ans.Rows.Count > 0)
                {
                    var returnedValue = ans.Rows[0]["Total"].ToString().Length > 0 ? ans.Rows[0]["Total"].ToString() : "0";
                    return Double.Parse(returnedValue);
                }
            }
            return null;
        }

        public Int32? Numero_Cobrado_En_Efectivo()
        {
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(this._RFC, this._Usuario);
            var terminal = db.Get_Terminal_Abierta() as DataRow;

            if (terminal != null)
            {
                string Query = @"SELECT COUNT(Total) as Total FROM dbo_Trans_Ticket_Cab WHERE
                                 Id_Apertura = @@IdApertura AND EsEfectivo <> 0";
                Query = Query.Replace("@@IdApertura", terminal["Id_Apertura"].ToString());
                var ans = SrvDB.ExecuteQuery_Get(Query);
                if (ans.Rows.Count > 0)
                {
                    var returnedValue = ans.Rows[0]["Total"].ToString().Length > 0 ? ans.Rows[0]["Total"].ToString() : "0";
                    return Int32.Parse(returnedValue);
                }
            }
            return null;
        }

        public Int32? Numero_Cobrado_Con_Tarjeta()
        {
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(this._RFC, this._Usuario);
            var terminal = db.Get_Terminal_Abierta() as DataRow;

            if (terminal != null)
            {
                string Query = @"SELECT COUNT(Total) as Total FROM dbo_Trans_Ticket_Cab WHERE
                                 Id_Apertura = @@IdApertura AND EsEfectivo = false";
                Query = Query.Replace("@@IdApertura", terminal["Id_Apertura"].ToString());
                var ans = SrvDB.ExecuteQuery_Get(Query);
                if (ans.Rows.Count > 0)
                {
                    var returnedValue = ans.Rows[0]["Total"].ToString().Length > 0 ? ans.Rows[0]["Total"].ToString() : "0";
                    return Int32.Parse(returnedValue);
                }
            }
            return null;
        }

        public Double? Total_Cobrado_Con_Tarjeta()
        {
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(this._RFC, this._Usuario);
            var terminal = db.Get_Terminal_Abierta() as DataRow;

            if (terminal != null)
            {
                string Query = @"SELECT SUM(Total) as Total FROM dbo_Trans_Ticket_Cab WHERE
                                 Id_Apertura = @@IdApertura AND EsEfectivo = false";
                Query = Query.Replace("@@IdApertura", terminal["Id_Apertura"].ToString());
                var ans = SrvDB.ExecuteQuery_Get(Query);
                if (ans.Rows.Count > 0)
                {
                    var returnedValue = ans.Rows[0]["Total"].ToString().Length > 0 ? ans.Rows[0]["Total"].ToString() : "0";
                    return Double.Parse(returnedValue);
                }
            }

            return null;
        }

        public Double? Total_Entradas_Dinero()
        {
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(this._RFC, this._Usuario);
            var terminal = db.Get_Terminal_Abierta() as DataRow;

            if (terminal != null)
            {
                string Query = @"SELECT SUM(Importe) as Total FROM dbo_Trans_MovimientoDinero_Caja WHERE
                                 Id_Apertura = @@IdApertura AND Signo_Operacion = '+'";
                Query = Query.Replace("@@IdApertura", terminal["Id_Apertura"].ToString());
                var ans = SrvDB.ExecuteQuery_Get(Query);
                if (ans.Rows.Count > 0)
                {
                    var returnedValue = ans.Rows[0]["Total"].ToString().Length > 0 ? ans.Rows[0]["Total"].ToString() : "0";
                    return Double.Parse(returnedValue);
                }
            }
            return null;
        }

        public Double? Total_Salidas_Dinero()
        {
            var db = new SIIE_ERP.BaseDatos.PuntoVenta.Catalogos.dbo_Cat_Terminal(this._RFC, this._Usuario);
            var terminal = db.Get_Terminal_Abierta() as DataRow;

            if (terminal != null)
            {
                string Query = @"SELECT SUM(Importe) as Total FROM dbo_Trans_MovimientoDinero_Caja WHERE
                                 Id_Apertura = @@IdApertura AND Signo_Operacion = '-'";
                Query = Query.Replace("@@IdApertura", terminal["Id_Apertura"].ToString());

                var ans = SrvDB.ExecuteQuery_Get(Query);
                if (ans.Rows.Count > 0)
                {
                    var returnedValue = ans.Rows[0]["Total"].ToString().Length > 0 ? ans.Rows[0]["Total"].ToString() : "0";
                    return Double.Parse(returnedValue);
                }
            }
            return null;
        }

        public Int32? Numero_Reimpresiones_Ticket(string Id)
        {
            string Query = @"SELECT COUNT(*) as Total FROM dbo_Trans_Ticket_Reimpresion WHERE
                                 Id_Ticket = @@IdTicket";
            Query = Query.Replace("@@IdTicket", Id);
            var ans = SrvDB.ExecuteQuery_Get(Query);
            if (ans.Rows.Count > 0)
            {
                var returnedValue = ans.Rows[0]["Total"].ToString().Length > 0 ? ans.Rows[0]["Total"].ToString() : "0";
                return Int32.Parse(returnedValue);
            }
            return null;
        }

        #endregion
    }
}
